package tools

import (
	"bytes"
	"fmt"
	"github.com/disintegration/imaging"
	"image"
	"io"
	"strings"
)

// 新增图片转换函数
func ConvertToJpeg(original io.Reader) ([]byte, error) {
	// 解码原始图片
	img, format, err := image.Decode(original)
	if err != nil {
		return nil, fmt.Errorf("图片解码失败: %w (格式: %s)", err, format)
	}

	// 创建缓冲区并编码为JPEG
	var buf bytes.Buffer
	if err := imaging.Encode(&buf, img, imaging.JPEG, imaging.JPEGQuality(85)); err != nil {
		return nil, fmt.Errorf("JPEG编码失败: %w", err)
	}

	return buf.Bytes(), nil
}

// 新增文档转文本函数
func ConvertToText(file io.Reader, ext string) (string, error) {
	switch strings.ToLower(ext) {
	case ".pdf":
		return parsePDF(file)
	case ".docx":
		return parsePDF(file)
	case ".xlsx":
		return parsePDF(file)
	default:
		return "", fmt.Errorf("unsupported format: %s", ext)
	}
}

// PDF解析实现
func parsePDF(file io.Reader) (string, error) {
	data, err := io.ReadAll(file)
	if err != nil {
		return "", fmt.Errorf("文件读取失败: %w", err)
	}
	var buf bytes.Buffer
	for _, b := range data {
		if b >= 32 && b <= 126 {
			buf.WriteByte(b)
		}
	}
	return buf.String(), nil
}

// 将int64切片转换为字符串
func ConvertInt64SliceToString(ints []int64) string {
	strs := make([]string, len(ints))
	for i, v := range ints {
		strs[i] = fmt.Sprintf("%d", v)
	}
	return fmt.Sprintf("[%s]", strings.Join(strs, ","))
}
